package cn.lhl01;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

//v:3.5
class MPG2 {

	@Test
	public void doMPG() {
		String projectPath = System.getProperty("user.dir");

		FastAutoGenerator.create(
						"jdbc:mysql://localhost:3306/audit?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai",
						"root",
						"lhl123"
				/*"jdbc:mysql://192.168.1.178:3306/wastest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai",
						"root",
						"Sjcx2022!@#"*/

				)
				.globalConfig(builder -> {
					builder.author("lhl") // 设置作者
							//.enableSwagger() // 开启 swagger 模式
							.dateType(DateType.ONLY_DATE)    //时间策略	DateType.ONLY_DATE 默认值: DateType.TIME_PACK
							.fileOverride()// 覆盖已生成文件
							.outputDir(projectPath + "/src/main/java"); // 指定输出目录
				})
				.packageConfig(builder -> {
					builder.parent("cn.lhl") // 设置父包名
							.moduleName("sys") // 指定模块名称
							.entity("entity")    //Entity 包名	默认值:entity
							.service("service")    //Service 包名	默认值:service
							.serviceImpl("service.impl")    //Service Impl 包名	默认值:service.impl
							.mapper("mapper")    //Mapper 包名	默认值:mapper  或者叫dao包名
							.xml("mapper_xml")	//Mapper XML 包名	默认值:mapper.xml
							.controller("controller")	//Controller 包名	默认值:controller
							//.pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mapper")) // 设置mapperXml生成路径
					;
				})
				.strategyConfig(builder -> {
					builder.addInclude(getTables("all")) // 设置需要生成的表名
							.addTablePrefix("au_") // 设置过滤表前缀
							//.enableCapitalMode()  //开启大写命名	默认值:false
							//实体的策略
							.entityBuilder()
								.enableLombok() //开启 lombok 模型	默认值:false
								.enableChainModel() //	开启链式模型	默认值:false
								.enableTableFieldAnnotation() //开启生成实体时生成字段注解	默认值:false
								.enableFileOverride() // 覆盖已有文件  默认值:false  fileOverride()// 覆盖已生成文件
								.naming(NamingStrategy.underline_to_camel)	//数据库表映射到实体的命名策略	默认下划线转驼峰命名:
								.build()
							//Controller 策略配置
							.controllerBuilder()
								//.superClass("com.baomidou.global.BaseController") // 	设置父类
								//.enableFileOverride() //  覆盖已有文件  默认值:false
								.enableHyphenStyle() //开启驼峰转连字符	默认值:false
								.enableRestStyle() //开启生成@RestController 控制器	默认值:false
								.formatFileName("%sController") //格式化文件名称
								.build()
							//Service 策略配置
							.serviceBuilder()
								//.enableFileOverride() //覆盖已有文件  默认值:false
								.formatServiceFileName("%sService") //格式化 service 接口文件名称
								.formatServiceImplFileName("%sServiceImp") // 格式化 service 实现类文件名称
								.build()
							.mapperBuilder()
								//.enableMapperAnnotation()	//开启 @Mapper 注解	默认值:false
								//.enableBaseResultMap()	//启用 BaseResultMap 生成	默认值:false
								//.enableBaseColumnList()//	启用 BaseColumnList	默认值:false
								.formatMapperFileName("%sMapper") //格式化 mapper 文件名称
								.formatXmlFileName("%sXml") //格式化 xml 实现类文件名称
								.build()
					;
				})
				//.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板

				.execute();

	}

	// 处理 all 情况
	protected static List<String> getTables(String tables) {
		return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
	}
}
